package service;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;

import model.Aluno;
import model.Curso;
import model.Endereco;
import model.Locacao;
import model.Reserva;

public class AlunoDAO extends GenericDAOImpl<Aluno> {
	
	public AlunoDAO(EntityManager em) {
		super.entityManager = em;
	}
	
	public Aluno criaAluno(String cpf, String rg, String nome, String nomePai,
			String nomeMae, Endereco endereco, Calendar dataNascimento, 
			Curso curso, String matricula) {
		Aluno aluno = new Aluno();
		aluno.setCpf(cpf);
		aluno.setCurso(curso);
		aluno.setDataNascimento(dataNascimento);
		aluno.setEndereco(endereco);
		aluno.setMatricula(matricula);
		aluno.setNome(nome);
		aluno.setNomeMae(nomeMae);
		aluno.setNomePai(nomePai);
		aluno.setRg(rg);
		aluno.setLocacoes(new ArrayList<Locacao>());
		aluno.setReservas(new ArrayList<Reserva>());
		insereObjeto(aluno);
		
		return aluno;
	}

	@Override
	public List<Aluno> listaObjetos() {
		TypedQuery<Aluno> query = entityManager.createQuery(
				"SELECT e FROM Aluno e", Aluno.class);
		return query.getResultList();
	}

	@Override
	public void deletaObjetos() {
		TypedQuery<Aluno> query = entityManager.createQuery(
				"DELETE FROM Aluno", Aluno.class);
		query.executeUpdate();
	}

	@Override
	public Aluno localizaObjeto(Long objId) {
		Aluno obj = entityManager.getReference(Aluno.class, objId);
		return obj;
	}

	public void addLocacao(Long objId, Locacao locacao) {
		Aluno alu = localizaObjeto(objId);
		if (alu != null && 
				alu.getLocacoes().size() <
					Aluno.NUMERO_MAXIMO_LOCACAO) {
			alu.getLocacoes().add(locacao);
		
		}
	}

	public void addReserva(Long objId, Reserva reserva) {
		Aluno alu = localizaObjeto(objId);
		if (alu != null) {
			alu.getReservas().add(reserva);
		}
	}

}
